package main

import (
	"context"
	"fmt"
	"log"
	"net"
	"os"

	users "users_demo/service" // 导入之前生成的包

	"google.golang.org/grpc"
)

// userService类型是Users服务的服务处理程序
type userService struct {
	users.UnimplementedUsersServer // 这个字段对于gRPC中的任何服务实现都是强制性的
}

func (s *userService) GetUser(ctx context.Context, in *users.UserGetRequest) (*users.UserGetReply, error) {
	// 打印客户端传过来的数据
	log.Printf("已接收到邮件地址: %s, 还有ID: %d", in.Email, in.Id)
	fmt.Println(in.Id)
	// 自定义数据响应给客户端
	u := users.User{
		Id:        string(in.Id + 1),
		FirstName: "mike",
		LastName:  "li",
		Age:       22,
	}
	fmt.Println(users.User{
		Id:        string(in.Id + 1),
		FirstName: "mike",
		LastName:  "li",
		Age:       22,
	})
	return &users.UserGetReply{User: &u}, nil
}

// 向gRPC服务器注册Users服务
func registerServices(s *grpc.Server) {
	users.RegisterUsersServer(s, &userService{})
}

// 启动gRPC服务器
func startServer(s *grpc.Server, l net.Listener) error {
	return s.Serve(l)
}

// 参考教程 https://blog.csdn.net/weixin_43459883/article/details/132618876
func main() {
	listenAddr := os.Getenv("LISTEN_ADDR")
	fmt.Println("地址", listenAddr)
	if len(listenAddr) == 0 {
		listenAddr = ":50051"
	}

	lis, err := net.Listen("tcp", ":8080")

	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("开始grpc")
	s := grpc.NewServer()
	fmt.Println("注册服务")
	registerServices(s)
	//
	fmt.Println("启动服务")
	log.Fatal(startServer(s, lis))
	fmt.Println("启动服务成功")
}
